框架安裝好,檔案也都處理完了,資料夾結構的觀念也釐清了一部分。可是!都到第三天的教學了,現在還沒有看到畫面,怎麼回事?
對熟悉網頁開發的讀者來講,應該很清楚問題的癥結:雖然程式碼都在,目前網站上還沒有實際運行。
所以!現在就要帶領各位讀者們進行運行環境的建置了!
筆者這裡,建議使用 docker 建構你的測試環境,這樣可以保證有一天,要是你希望網站對外公開時,能最大的減少環境所產生的風險。雖然學習 docker 需要不少時間成本,但是相當值得!
首先,是在你的開發機器上面安裝 docker:
安裝時會要求你申請 docker Hub 網站的帳號 這不是什麼奇怪的網站,不用擔心,可以放心的申請。
依照步驟安裝好之後,我們在指令列裡面,確認一下是否安裝成功
$ docker --version
Docker version 19.03.1, build 74b1e89
如果能成功地看到安裝的 docker 版本訊息,那麼恭喜你!你已經安裝成功了
接著,我們來安裝 Laradock 囉!
什麼是 Laradock 呢?
簡單的說,Laradock 是一個運行 PHP 網頁環境的 docker 環境套裝。
如同官網所說的「Use Docker First - Then Learn About It Later」,藉由這個套裝,我們可以暫時先不用理會 docker image,docker container 等等觀念,直接先使用並體會到 docker 的好處,然後再學習 docker 許多使用上的觀念。
接著,我們就開始學習怎麼用吧!
對已經安裝過 git 的讀者來說,可以省略這個段落
要安裝 Laradock,我們建議使用 git 這個版本控制軟體進行下載。
操作完所有程序之後,我們一樣檢查一下是否成功安裝 git
$ git --version
git version 2.20.1 (Apple Git-117)
如果能成功看到版本號,那麼就代表我們安裝成功了!往下一步邁進
然後,我們下載 Laradock。在 Laravel60demo/
裡面,我們執行
$ git clone https://github.com/Laradock/laradock.git
下載到指定位置之後,我們進入到 laradock/
資料夾看看內容。
$ cd laradock
$ ls
DOCUMENTATION couchdb haproxy laravel-horizon mosquitto postgres-postgis traefik
LICENSE docker-compose.sync.yml hhvm logs mssql rabbitmq travis-build.sh
adminer docker-compose.yml ide-codiad logstash mysql redis varnish
aerospike docker-registry ide-icecoder maildev neo4j redis-cluster workspace
apache2 docker-sync.yml ide-theia mailhog nginx redis-webui zookeeper
aws-eb-cli docker-web-ui ide-webide manticore percona rethinkdb
beanstalkd elasticsearch ipython mariadb php-fpm selenium
beanstalkd-console env-example jenkins memcached php-worker solr
caddy gitlab jupyterhub minio phpmyadmin sonarqube
cassandra grafana kibana mongo portainer sync.sh
certbot graylog laravel-echo-server mongo-webui postgres thumbor
確認下載完成了,檔案也沒有問題,我們準備開始建置我們的環境
運行 Laradock 之前,我們記得建立好 Laradock 所需的 .env
檔案,這邊我們先使用原本就附加的範例檔案 env-example
。
在 laradock/
資料夾裡面執行
$ cp env-example .env
確認建立好 .env
之後,我們來開啟運行網站所需的服務
$ docker-compose up -d nginx mysql workspace
注意這邊的參數不能省略!省略了會一次打開所有的服務,電腦很快就撐不住了 !
跟官網的範例不一樣,筆者這邊移除了部分的服務,這樣讓之後的教學更加單純。
檢查一下是不是成功了,我們用 docker ps
這個指令看看:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bbce5b03331 laradock_nginx "/bin/bash /opt/star…" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1
1132b59579fd laradock_php-fpm "docker-php-entrypoi…" 6 seconds ago Up 5 seconds 9000/tcp laradock_php-fpm_1
bd2bfcf72e83 laradock_workspace "/sbin/my_init" 7 seconds ago Up 6 seconds 0.0.0.0:2222->22/tcp laradock_workspace_1
bf98e008c16b docker:dind "dockerd-entrypoint.…" 8 seconds ago Up 7 seconds 2375/tcp laradock_docker-in-docker_1
8ca010fdce32 laradock_mysql "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
看起來好像成功囉? 我們接著連線到自己的電腦看看吧!
成功啦!!!(撒花)(撒花)(撒花)
補充幾個常見的錯誤
如果你看到的是 404 畫面
很可能是因為,我們安裝 laradock 的位置出錯了,導致無法正確抓到 Laravel 框架程式的位置
這時候我們看看 laradock 資料夾是否確實在專案資料夾裡面,如果不是的話,刪掉重新安裝就好
另外有讀者看到的是 500 畫面
一般來說 500 代表的是網站運行錯誤,發生的原因很多,會需要更多的資訊才能找到錯誤。
不過,一個很常發生在剛安裝 Laravel 初期的錯誤,是沒有成功安裝 .env 檔案
這時候只要將專案整個重新刪除重裝即可。
或者,可以在專案資料夾內,直接使用範例 env 檔案
$ cp .env.example .env
然後下指令補齊 Laravel 的 secret key
$ php artisan key:generate
這樣就可以囉!
總算不再沒有畫面了,今天就到這邊囉!各位明天見!
是說在 docker-compose.yml
檔案裡面有看到
nginx
相依於 php-fpm
php-fpm
又相依於 workspace
所以 docker-compose up -d nginx mysql workspace
這行應該是可以把 workspace
拿掉
你說的沒錯!即使把 workspace
拿掉,所開啟的容器是一模一樣的。
個人認為在官方的教學中,在命令保留這個詞,可能是讓不熟悉的用戶知道實際上開啟的服務有 nginx,mysql 和放置程式碼用的 workspace。因此這裏保留這個指令,而不是使用更簡潔的 docker-compose up -d nginx mysql
非常感謝回應!
我的無法正常開啟,請問這是什麼問題 ?
我重裝 LaravelDock
變成 404 not found
你好
以這個畫面來看,看不太出問題喔。
因為目前看起來,docker 的設置和 container 個數都沒有問題。
而因為程式設置而產生 Http Status 500 的可能性實在太多了。
如果無法透過 google 找出問題的話,或許從頭開始一次這份教學,能解決這個問題。
不好意思沒幫上忙
一個不確定是不是這樣的可能性:
請問你的 Laravel60/ 專案裡面,有 .env
這個檔案嗎?
如果沒有,可能是 Laravel 安裝時有問題,導致這個檔案沒有出現。
如果是這樣,可以在 Laravel60/ 裡面執行 cp .env.example .env
然後執行 php artisan key:generate
再看看網頁能不能正常出現
好的 我試試
我有這個檔案
再執行 php artisan key:generate 後
出現
不是在 laradock 裡面找,是在 Laravel60/ 資料夾裡面檢查
404 通常是安裝的位置錯誤,不是在 Laravel 專案內下載 laradock 資料夾,導致資料夾路徑不正確。
有了 ,謝謝你 !!!
想請問安裝 docker 出現以下錯誤
ERROR: for laradock_nginx_1 Cannot start service nginx: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use
但是下指令查看 lsof -n -i:80
是空的
喔喔 我知道了 我的php和Apache綁著
關掉 Apache 即可 sudo apachectl stop
謝謝 不好意ㄙ~